import Vue from 'vue'
import api from './http'
import i18n from './i18n'
import store from './store'
import global from '@/utils/global'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import 'font-awesome/css/font-awesome.min.css'
import '@/assets/iconfont/iconfont.css'
import '@/assets/iconnav/iconfont.css'
import echarts from 'echarts'
import axios from 'axios'
import qs from 'qs'
import utils from '@/assets/js/utils' 
import seachTableUtils from '@/assets/js/seachTableUtils' 
import {  Message } from 'element-ui'
import myCharts from './charts/myCharts.js'
import VCharts from 'v-charts';
import VueResource from 'vue-resource'
import App from './App'
import router from './router'
import VueClipboard from 'vue-clipboard2'
import '@/components/AutoMarket/setPath/index.css'            // 引入自动化营销中创建用户旅程拖拽组件样式
import '@/assets/icon/iconfont.css'                           // 引入自动化营销自定义icon样式
import Meta from 'vue-meta'                                   // 引入vue-meta插件，在抽奖页面设置视口标签
import XLSX from 'xlsx'
import '@/assets/css/normal.css'  


Vue.use(Meta)
Vue.use(XLSX)
Vue.use(VueClipboard)

Vue.use(myCharts)
Vue.use(VCharts);

Vue.use(VueResource)

Vue.prototype.$message = Message


Vue.directive('enterNumber', {
  inserted: function (el) {
    el.addEventListener("keypress",function(e){
      e = e || window.event;
      let charcode = typeof e.charCode === 'number' ? e.charCode : e.keyCode;
      let re = /\d/;
      if(!re.test(String.fromCharCode(charcode)) && charcode > 9 && !e.ctrlKey){
        if(e.preventDefault){
          e.preventDefault();
        }else{
          e.returnValue = false;
        }
      }
    });
  }
});

Vue.use(XLSX)


Vue.prototype.$echarts = echarts
Vue.use(ElementUI)
Vue.use(api)

Vue.prototype.$axios = axios
Vue.prototype.$qs = qs
Vue.prototype.utils = utils

Vue.prototype.seachTableUtils = seachTableUtils

Vue.prototype.global = global



/**
 * 过滤特殊字符
 */
Vue.prototype.validSe = function (value, number = 255) {
  value = value.replace(/[`～*~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]·~！@#￥%……&*（）——\-+={}|《》？：“”【】、；‘’，。、]/g, '').replace(/\s/g, "");
  if (value.length >= number) {
    this.$message({
      type: "warning",
      message: `输入内容不能超过${number}个字符`
    });
  }
  return value;
};

//只能输汉字
Vue.prototype.chineseOnly = function (value) {
  value = value.replace(/[^\u4E00-\u9FA5]/g, '');
  return value
};
//只能输正整数
Vue.prototype.idOnly = function (value) {
  value = value.replace(/[^0-9]/g, '');
  return value
};
//不允许输汉字
Vue.prototype.noChineseOnly = function (value) {
  value = value.replace(/[\u4E00-\u9FA5]/g, '');
  return value
};
//逗号和数字
Vue.prototype.programIdOnly = function (value) {
  value = value.replace(/[^0-9,]/g, '');
  return value
};
//数字和回车
Vue.prototype.idsOnly = function (value) {
  value = value.replace(/[^\r\n0-9]/g, '');
  return value
};
//数值大小限定
Vue.prototype.numberLimit = function (value) {
  value = value.replace(/[^0-9]/g, '');
  if (value >= 2147483647) {
    this.$message({
      type: "warning",
      message: `最大可输入值为2147483647`
    });
  }
  return value
};
// 正整数
Vue.prototype.onlyPositiveInteger = function (value) {
  value = String(value).match(/[1-9]\d*/g, "")
  return value === null ? '' : Number(value[0])
};
// 正整数（包含0）
Vue.prototype.onlyPositiveInteger1 = function (value) {
  console.log(typeof (value));
  value = String(value).match(/[1-9]\d*|0/g, "")
  return value === null ? '' : Number(value[0])
};
// 负整数
Vue.prototype.onlyNegativeInteger = function (value) {
  value = String(value).match(/^-[1-9]*\d*/g, "")
  return value === null ? '' : value[0] === '-' ? '-' : value[0] === '-0' ? '' : Number(value[0])
};
// 负整数（包含0）
Vue.prototype.onlyNegativeInteger1 = function (value) {
  value = String(value).match(/^-[1-9]*\d*|0/g, "")
  return value === null ? '' : value[0] === '-' ? '-' : Number(value[0])
};
// 整数
Vue.prototype.onlyInteger = function (value) {
  value = String(value).match(/^-?[1-9]*\d*|0/g, '')
  return value === null ? '' : value[0] === '-' ? '-' : value[0] === '' ? '' : Number(value[0])
};
// 整数区间
Vue.prototype.onlySection = function (value, min, max) {
  if (min < 0) {
    value = String(value).match(/-?[1-9]*\d*/g, "")
  } else {
    value = String(value).match(/[1-9]*\d*/g, "")
  }
  // value = String(value).match(/-?[1-9]*\d*/g, "")
  value = value === null ? '' : value[0] === '-' ? '-' : value[0] === '' ? '' : Number(value[0])
  if (value < min) {
    return min
  } else if (value > max) {
    return max
  } else {
    return value
  }
};





// 请求拦截（配置发送请求的信息）
axios.interceptors.request.use(function (config){
  // 处理请求之前的配置
  return config;
  }, function (error){
  // 请求失败的处理
  return Promise.reject(error);
  });

// response 拦截器
axios.interceptors.response.use(
  response => {
    return response
  },
  err => {
    if (err && err.response) {
      switch (err.response.status) {
        case 400:
          err.message = '请求错误'
          break
        case 401:
          err.message = '未授权，请登录'
          break
        case 403:
          err.message = '拒绝访问'
          break
        case 404:
          err.message = `请求地址出错: ${err.response.config.url}`
          break
        case 408:
          err.message = '请求超时'
          break
        case 500:
          err.message = '服务器内部错误'
          break
        case 501:
          err.message = '服务未实现'
          break
        case 502:
          err.message = '网关错误'
          break
        case 503:
          err.message = '服务不可用'
          break
        case 504:
          err.message = '网关超时'
          break
        case 505:
          err.message = 'HTTP版本不受支持'
          break
        default:
      }
    }else{
       err.message = "网络出现问题，请稍后再试"
    } 
    return Promise.reject(err) // 返回接口返回的错误信息
  }
)

new Vue({
  el: '#app',
  i18n,
  router,
  store,
  render: h => h(App)
});
